package com.code.soulspringboot.exception;

import com.code.soulspringboot.code.CommonErrorCode;

/**
 * 通用异常
 *
 * @author lyf
 * @date 2022-11-20 22:27
 */
public class BaseException extends RuntimeException {

    private CommonErrorCode errorCode;

    protected Object[] args;

    public BaseException() {}

    public BaseException(CommonErrorCode errorCode) {
        super(errorCode.getCode() + " === " + errorCode.getMsg());
        this.errorCode = errorCode;
    }

    public BaseException(CommonErrorCode errorCode, Throwable cause) {
        // 这一行非常的关键，要把日志信息和异常信息给到父类异常，才能正确的打印出来，不能把消息弄丢了
        // 只需要在 baseException 中处理即可，子类异常只关心业务相关异常枚举信息即可
        super(errorCode.getCode() + " === " + errorCode.getMsg(), cause);
        this.errorCode = errorCode;
    }

    public BaseException(CommonErrorCode errorCode, Object... args) {
        super(errorCode.getCode() + " === " + String.format(errorCode.getMsg(), args));
        this.errorCode = errorCode;
        this.args = args;
    }

    public BaseException(CommonErrorCode errorCode, Throwable cause, Object... args) {
        // 这一行非常的关键，要把日志信息和异常信息给到父类异常，才能正确的打印出来，不能把消息弄丢了
        // 只需要在 baseException 中处理即可，子类异常只关心业务相关异常枚举信息即可
        super(errorCode.getCode() + " === " + String.format(errorCode.getMsg(), args), cause);

        this.errorCode = errorCode;
        this.args = args;
    }

    public CommonErrorCode getErrorCode() {
        return this.errorCode;
    }

    public String getErrorMsg() {
        if (errorCode == null) {
            return null;
        }
        return String.format(errorCode.getMsg(), this.args);
    }

}
